home *** CD-ROM | disk | FTP | other *** search
-
-
-
- DDDDSSSSTTTTEEEEBBBBZZZZ((((3333SSSS)))) DDDDSSSSTTTTEEEEBBBBZZZZ((((3333SSSS))))
-
-
-
- NNNNAAAAMMMMEEEE
- DSTEBZ - compute the eigenvalues of a symmetric tridiagonal matrix T
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- SUBROUTINE DSTEBZ( RANGE, ORDER, N, VL, VU, IL, IU, ABSTOL, D, E, M,
- NSPLIT, W, IBLOCK, ISPLIT, WORK, IWORK, INFO )
-
- CHARACTER ORDER, RANGE
-
- INTEGER IL, INFO, IU, M, N, NSPLIT
-
- DOUBLE PRECISION ABSTOL, VL, VU
-
- INTEGER IBLOCK( * ), ISPLIT( * ), IWORK( * )
-
- DOUBLE PRECISION D( * ), E( * ), W( * ), WORK( * )
-
- IIIIMMMMPPPPLLLLEEEEMMMMEEEENNNNTTTTAAAATTTTIIIIOOOONNNN
- These routines are part of the SCSL Scientific Library and can be loaded
- using either the -lscs or the -lscs_mp option. The -lscs_mp option
- directs the linker to use the multi-processor version of the library.
-
- When linking to SCSL with -lscs or -lscs_mp, the default integer size is
- 4 bytes (32 bits). Another version of SCSL is available in which integers
- are 8 bytes (64 bits). This version allows the user access to larger
- memory sizes and helps when porting legacy Cray codes. It can be loaded
- by using the -lscs_i8 option or the -lscs_i8_mp option. A program may use
- only one of the two versions; 4-byte integer and 8-byte integer library
- calls cannot be mixed.
-
- PPPPUUUURRRRPPPPOOOOSSSSEEEE
- DSTEBZ computes the eigenvalues of a symmetric tridiagonal matrix T. The
- user may ask for all eigenvalues, all eigenvalues in the half-open
- interval (VL, VU], or the IL-th through IU-th eigenvalues.
-
- To avoid overflow, the matrix must be scaled so that its
- largest element is no greater than overflow**(1/2) *
- underflow**(1/4) in absolute value, and for greatest
- accuracy, it should not be much smaller than that.
-
- See W. Kahan "Accurate Eigenvalues of a Symmetric Tridiagonal Matrix",
- Report CS41, Computer Science Dept., Stanford
- University, July 21, 1966.
-
-
- AAAARRRRGGGGUUUUMMMMEEEENNNNTTTTSSSS
- RANGE (input) CHARACTER
- = 'A': ("All") all eigenvalues will be found.
- = 'V': ("Value") all eigenvalues in the half-open interval (VL,
- VU] will be found. = 'I': ("Index") the IL-th through IU-th
- eigenvalues (of the entire matrix) will be found.
-
-
-
-
- PPPPaaaaggggeeee 1111
-
-
-
-
-
-
- DDDDSSSSTTTTEEEEBBBBZZZZ((((3333SSSS)))) DDDDSSSSTTTTEEEEBBBBZZZZ((((3333SSSS))))
-
-
-
- ORDER (input) CHARACTER
- = 'B': ("By Block") the eigenvalues will be grouped by split-off
- block (see IBLOCK, ISPLIT) and ordered from smallest to largest
- within the block. = 'E': ("Entire matrix") the eigenvalues for
- the entire matrix will be ordered from smallest to largest.
-
- N (input) INTEGER
- The order of the tridiagonal matrix T. N >= 0.
-
- VL (input) DOUBLE PRECISION
- VU (input) DOUBLE PRECISION If RANGE='V', the lower and
- upper bounds of the interval to be searched for eigenvalues.
- Eigenvalues less than or equal to VL, or greater than VU, will
- not be returned. VL < VU. Not referenced if RANGE = 'A' or 'I'.
-
- IL (input) INTEGER
- IU (input) INTEGER If RANGE='I', the indices (in ascending
- order) of the smallest and largest eigenvalues to be returned. 1
- <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. Not
- referenced if RANGE = 'A' or 'V'.
-
- ABSTOL (input) DOUBLE PRECISION
- The absolute tolerance for the eigenvalues. An eigenvalue (or
- cluster) is considered to be located if it has been determined to
- lie in an interval whose width is ABSTOL or less. If ABSTOL is
- less than or equal to zero, then ULP*|T| will be used, where |T|
- means the 1-norm of T.
-
- Eigenvalues will be computed most accurately when ABSTOL is set
- to twice the underflow threshold 2*DLAMCH('S'), not zero.
-
- D (input) DOUBLE PRECISION array, dimension (N)
- The n diagonal elements of the tridiagonal matrix T.
-
- E (input) DOUBLE PRECISION array, dimension (N-1)
- The (n-1) off-diagonal elements of the tridiagonal matrix T.
-
- M (output) INTEGER
- The actual number of eigenvalues found. 0 <= M <= N. (See also
- the description of INFO=2,3.)
-
- NSPLIT (output) INTEGER
- The number of diagonal blocks in the matrix T. 1 <= NSPLIT <= N.
-
- W (output) DOUBLE PRECISION array, dimension (N)
- On exit, the first M elements of W will contain the eigenvalues.
- (DSTEBZ may use the remaining N-M elements as workspace.)
-
- IBLOCK (output) INTEGER array, dimension (N)
- At each row/column j where E(j) is zero or small, the matrix T is
- considered to split into a block diagonal matrix. On exit, if
- INFO = 0, IBLOCK(i) specifies to which block (from 1 to the
-
-
-
- PPPPaaaaggggeeee 2222
-
-
-
-
-
-
- DDDDSSSSTTTTEEEEBBBBZZZZ((((3333SSSS)))) DDDDSSSSTTTTEEEEBBBBZZZZ((((3333SSSS))))
-
-
-
- number of blocks) the eigenvalue W(i) belongs. (DSTEBZ may use
- the remaining N-M elements as workspace.)
-
- ISPLIT (output) INTEGER array, dimension (N)
- The splitting points, at which T breaks up into submatrices. The
- first submatrix consists of rows/columns 1 to ISPLIT(1), the
- second of rows/columns ISPLIT(1)+1 through ISPLIT(2), etc., and
- the NSPLIT-th consists of rows/columns ISPLIT(NSPLIT-1)+1 through
- ISPLIT(NSPLIT)=N. (Only the first NSPLIT elements will actually
- be used, but since the user cannot know a priori what value
- NSPLIT will have, N words must be reserved for ISPLIT.)
-
- WORK (workspace) DOUBLE PRECISION array, dimension (4*N)
-
- IWORK (workspace) INTEGER array, dimension (3*N)
-
- INFO (output) INTEGER
- = 0: successful exit
- < 0: if INFO = -i, the i-th argument had an illegal value
- > 0: some or all of the eigenvalues failed to converge or
- were not computed:
- =1 or 3: Bisection failed to converge for some eigenvalues; these
- eigenvalues are flagged by a negative block number. The effect
- is that the eigenvalues may not be as accurate as the absolute
- and relative tolerances. This is generally caused by
- unexpectedly inaccurate arithmetic. =2 or 3: RANGE='I' only: Not
- all of the eigenvalues
- IL:IU were found.
- Effect: M < IU+1-IL
- Cause: non-monotonic arithmetic, causing the Sturm sequence to
- be non-monotonic. Cure: recalculate, using RANGE='A', and pick
- out eigenvalues IL:IU. In some cases, increasing the PARAMETER
- "FUDGE" may make things work. = 4: RANGE='I', and the
- Gershgorin interval initially used was too small. No eigenvalues
- were computed. Probable cause: your machine has sloppy
- floating-point arithmetic. Cure: Increase the PARAMETER "FUDGE",
- recompile, and try again.
-
- PPPPAAAARRRRAAAAMMMMEEEETTTTEEEERRRRSSSS
- RELFAC DOUBLE PRECISION, default = 2.0e0
- The relative tolerance. An interval (a,b] lies within "relative
- tolerance" if b-a < RELFAC*ulp*max(|a|,|b|), where "ulp" is the
- machine precision (distance from 1 to the next larger floating
- point number.)
-
- FUDGE DOUBLE PRECISION, default = 2
- A "fudge factor" to widen the Gershgorin intervals. Ideally, a
- value of 1 should work, but on machines with sloppy arithmetic,
- this needs to be larger. The default for publicly released
- versions should be large enough to handle the worst machine
- around. Note that this has no effect on accuracy of the
- solution.
-
-
-
- PPPPaaaaggggeeee 3333
-
-
-
-
-
-
- DDDDSSSSTTTTEEEEBBBBZZZZ((((3333SSSS)))) DDDDSSSSTTTTEEEEBBBBZZZZ((((3333SSSS))))
-
-
-
- SSSSEEEEEEEE AAAALLLLSSSSOOOO
- INTRO_LAPACK(3S), INTRO_SCSL(3S)
-
- This man page is available only online.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 4444
-
-
-
-